

//类型断言可以用来手动指定一个值的类型，即允许变量从一种类型更改为另一种类型。
//<类型>值
//值 as 类型

var str = '1' 
var str2:number = <number> <any> str   //str、str2 是 string 类型
console.log(str2)  //1

/*
TypeScript 是怎么确定单个断言是否足够
当 S 类型是 T 类型的子集，或者 T 类型是 S 类型的子集时，S 能被成功断言成 S。这是为了在进行类型断言时提供额外的安全性，完全毫无根据的断言是危险的，
如果你想这么做，你可以使用 any。

它之所以不被称为类型转换，是因为转换通常意味着某种运行时的支持。但是，类型断言纯粹是一个编译时语法，同时，它也是一种为编译器提供关于如何分析代码的方法。
 */


 //类型推断
 //当类型没有给出时，TypeScript 编译器利用类型推断来推断类型。
//如果由于缺乏声明而不能推断出类型，那么它的类型被视作默认的动态 any 类型。


var num = 2;    // 类型推断为 number
console.log("num 变量的值为 "+num); 
//num = "12";    // 编译错误
console.log(num);

//第一行代码声明了变量 num 并=设置初始值为 2。 注意变量声明没有指定类型。因此，程序使用类型推断来确定变量的数据类型，
//第一次赋值为 2，num 设置为 number 类型。
//第三行代码，当我们再次为变量设置字符串类型的值时，这时编译会错误。因为变量已经设置为了 number 类型。
